package com.dbms.parser.ast;

import java.io.Serializable;

/**
 * ArithmeticNode (算术节点) 是一个用于表示简单算术表达式的 AST 节点。
 * 例如，对于 SQL `UPDATE users SET age = age + 1`，`age + 1` 这部分
 * 就可以被解析成一个 ArithmeticNode。它主要在 UPDATE 语句的 SET 子句中被使用。
 * 实现 Serializable 接口允许该对象在网络间传输（例如在分布式数据库场景中）。
 */
public class ArithmeticNode implements Serializable {
    /**
     * 参与运算的列名 (例如 "age")。
     */
    private final String column;
    /**
     * 算术操作符 (例如 "+", "-")。
     */
    private final String operator;
    /**
     * 参与运算的常量值 (例如 1)。
     */
    private final Object value;

    public ArithmeticNode(String column, String operator, Object value) {
        this.column = column;
        this.operator = operator;
        this.value = value;
    }

    /**
     * 获取列名。
     * @return 列名字符串。
     */
    public String getColumn() {
        return column;
    }

    /**
     * 获取操作符。
     * @return 操作符字符串。
     */
    public String getOperator() {
        return operator;
    }

    /**
     * 获取常量值。
     * @return 常量值对象。
     */
    public Object getValue() {
        return value;
    }

    /**
     * 返回该算术表达式的字符串表示形式。
     * @return 例如 "age + 1"。
     */
    @Override
    public String toString() {
        return column + " " + operator + " " + value;
    }
}